package SystemServer.server;

import SystemClient.modal.User;
import SystemClient.modal.UserMsg;

import java.io.IOException;
import java.util.List;

/**
 * 编程实现服务器的主功能
 */
public class ServerView {

    /**
     * 使用合成复用原则
     */
    private Server server;
    private List<User> userList;

    /**
     * 通过构造方法实现成员变量的初始化
     * @param server
     */
    public ServerView(Server server, List<User> userList) {
        this.server = server;
        this.userList = userList;
    }

    /**
     * 自定义成员方法实现客户端发来消息的接收并处理
     */
    public void serverReceive() throws IOException, ClassNotFoundException {
        while (true) {
            System.out.println("服务器等待数据的到来...");
            // 使用对象输入流来接收
            UserMsg um = (UserMsg) server.getOis().readObject();
            System.out.println(um);
            switch (um.getType()) {
                case "managerCheck":
                    serverManagerCheck(um);
                    break;
                case "clientExit":
                    server.serverClose();
                    return;
                case "clientAddUser":
                    serverAddUser(um);
                    break;
            }
        }
    }

    public void serverManagerCheck(UserMsg um) throws IOException {
        // 调用方法实现管理员账号和密码信息的校验
        if ("admin".equals(um.getUser().getUserName()) && "123".equals(um.getUser().getPassword())) {
            um.setType("success");
        } else {
            um.setType("fail");
        }
        // 将校验结果发送给客户端
        server.getOos().writeObject(um);
        System.out.println("服务器发送校验结果成功！");
    }

    /**
     * 自定义成员方法实现服务器增加学员账户的功能
     * @param um
     * @throws IOException
     */
    public void serverAddUser(UserMsg um) throws IOException {
        // 判断集合中是否已存在该学员信息，若存在则添加失败
        for(User tu: userList) {
            if(tu.getUserName().equalsIgnoreCase(um.getUser().getUserName())) {
                um.setType("fail");
                server.getOos().writeObject(um);
                System.out.println("服务器发送添加学员结果失败！");
                return;
            }
        }
        // 若不存在则调用集合中add方法添加即可
        userList.add(um.getUser());
        um.setType("success");
        server.getOos().writeObject(um);
        System.out.println("服务器发送添加学员结果成功！");
    }
}
